/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.actions.departamentos;

import com.mapping.Departamento;
import static com.opensymphony.xwork2.Action.SUCCESS;
import com.opensymphony.xwork2.ActionSupport;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
import javax.persistence.Query;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.Result;

/**
 *
 * @author Andres
 */
@Namespace(value = "/")
@Action(value = "altaDepartamento", results = {@Result(name = "success", location = "/GestionDepartamentos/rAltaDepartamento.jsp")})
public class AltaDepartamentoAction extends ActionSupport {

    private String id;
    private String nombre;
    private String descripcion;
    private String localizacion;

    @Override
    public String execute() {

        String tipoId = nombre.substring(0, 3).toUpperCase();
        String consulta = "select max(d.idDepartamento) from Departamento d where d.idDepartamento like :idDepartamento";

        Departamento depa = new Departamento();
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("inventarios");
        EntityManager em = emf.createEntityManager();
        EntityTransaction tx = em.getTransaction();
        tx.begin();
        Query query = em.createQuery(consulta);
        query.setParameter("idDepartamento", tipoId + "%");
        id = formateId((String) query.getSingleResult(), tipoId, 3);
        depa.setIdDepartamento(id);
        depa.setNombre(nombre);
        depa.setDescripcion(descripcion);
        depa.setLocalizacion(localizacion);
        em.persist(depa);
        em.flush();
        tx.commit();
        em.close();

        return SUCCESS;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }

    public void setLocalizacion(String localizacion) {
        this.localizacion = localizacion;
    }

    public String getId() {
        return id;
    }

    public String getNombre() {
        return nombre;
    }

    public String getDescripcion() {
        return descripcion;
    }

    public String getLocalizacion() {
        return localizacion;
    }

    public String formateId(String id, String tipoId, int length) {
        String numero;
        if (id == null) {
            id = tipoId + "001";
        } else {
            id = id.substring(3, 6);
            numero = "" + (Integer.parseInt(id) + 1);
            id = tipoId;
            for (int i = numero.length(); i < length; i++) {
                id += "0";
            }
            id += numero;
        }
        return id;
    }
}
